Parfois, il est nécessaire de convertir un tableau croisé (pivot) en un tableau plat. Cette procédure est appelée " redressement des données "
Le programme LibreOffice Calc n'a pas de fonctionnalité standard pour convertir les tableaux croisés dynamiques en " plat ", mais vous pouvez écrire vous-même la procédure correspondante. Voyons comment procéder.
Regardons l'image ci-dessous pour mieux comprendre l'essence du problème. A gauche nous avons un tableau sous forme de matrice (tableau croisé dynamique), et à droite - un tableau régulier avec des colonnes (tableau plat) :
Lorsque vous développez une table, vous décompressez la paire attribut-valeur qui constitue l'intersection des colonnes de la table matricielle et vous les réorientez vers les colonnes aplaties de la table plate :
Ouvrez le menu Tools - Macros - Edit Macros..., sélectionnez Module1 et copiez le texte suivant dans le module :
Sub UnPivotTable
' moonexcel.com.ua
Dim oBook As Object
Dim oActiveSheet As Object
Dim oSelRange As Object
Dim oNewSheet As Object
Dim i As Long
Dim iTopLabelRowCount As Integer
Dim iSideLabelColCount As Integer
oBook = ThisComponent
oActiveSheet = oBook.CurrentController.ActiveSheet
oSelRange = oBook.CurrentSelection
' Ajouter une nouvelle feuille
oBook.Sheets.insertNewByName("UnPivoted Table",0)
oNewSheet = oBook.Sheets(0)
' Déterminer la taille des en-têtes
iTopLabelRowCount = InputBox(" Combien de lignes dans l’en-tête supérieur ? ")
iSideLabelColCount = InputBox(" Combien de colonnes dans l’en-tête latéral ? ")
i = 0
For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count
For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count
For j = 1 To iSideLabelColCount
oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula
Next j
For k = 1 To iTopLabelRowCount
oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula
Next k
oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula
i = i + 1
Next c
Next r
End Sub
Ensuite, fermez Macro Editor et revenez à votre feuille de calcul dans LibreOffice Calc. Sélectionnez le tableau entier avec les en-têtes en haut et à gauche et exécutez notre nouvelle macro via le menu Tools - Macros - Run Macro...
La macro insérera une nouvelle feuille nommée dans votre classeur
Vous pouvez également utiliser l'utilitaire "Tableau croisé dynamique (Unpivot)" en installant l'extension YLC_Utilities.oxt .
Après cela, cet utilitaire sera disponible dans tous les fichiers qui seront ouverts dans LibreOffice Calc.